/**
/ * @author Alberto Cruz
*
*
*Clase lista, que recoje los elemento que usamos en las listas
 * 
 */
import java.util.ArrayList;

public class Lista<T>{

	// se crea la lista con valor NULL (no olvidar)
   //Modificamos esta parte de codigo desde la web de Google Code
   
	private ArrayList <T>lista = null;

	public Lista() {
		lista = new ArrayList<T>();
	}

	/**
	 * añadir EN LA POSICION INDICADA
	 * 
	 * @param posicion
	 * @param elemento
	 */

	void anadirenposicion(T element) {
		System.out.println("¿En que posicion de la lista quieres colocar a este jugador?");
		int posicion = Teclado.LeeEntero();

		if (posicion < 0 || (posicion > lista.size())) {
			System.out.println("Posición fuera de rango");

		} else {
			lista.add(posicion, element);
		}

	}
	
	void anadir(T element){
		lista.add(element);
	}


	void buscar() {
		System.out.println("¿De que posicion de la lista quieres obtener informacion?");
		int posicion2 = Teclado.LeeEntero();
		if (posicion2 > 0 && (posicion2 < lista.size()))
			System.out.println("El elemento que has buscado es: "+ lista.get(posicion2));
		else

			System.out.println("Posicion: " + posicion2+ " esta fuera de rango");
	}


	void tamano() {
		System.out.println("El tamaño es: "+lista.size());
	}

	/**
	 * Elimine elementos de la lista
	 * 
	 * @param posi
	 */
	void eliminar() {
		System.out.println("¿Que posicion desea borrar?");
		int posi = Teclado.LeeEntero();
		posi+=1;
		if (posi > 0 && (posi < lista.size() - 1))
			lista.remove(posi);
		else
			System.out.println("Posicion fuera de rango");
	}

	/**
	 * copiar un elemento y añadirlo al final del ArrayList
	 * 
	 * @param posic
	 */
	void copiarElemento() {
		System.out.println("¿Que jugador quiere copiar y colocar al final de la lista?");
		int posic = Teclado.LeeEntero();
		System.out.println("El elemento que has copiado es: "+ lista.get(posic));
		lista.add(lista.get(posic));
	}

	// CLONAR una lista (los cambios en una lista no modificaran la nueva o
	// biceversa)
	/**
	 * CLONAR una lista (los cambios en una lista no modificaran la nueva o
	 * biceversa)
	 * 
	 * @return
	 */

	Lista copiaLista() {
		Lista copiaLista = new Lista();
		copiaLista.lista = (ArrayList<T>) lista.clone();
		return copiaLista;
	}

	/*
	 * void copiar() { ArrayList copia = new ArrayList(); copia = (ArrayList)
	 * arraylist.clone(); System.out.println("COPIA DE LISTA: "+copia); }
	 */
	/**
	 * Mostrar la lista
	 */
	void mostrar() {
		System.out.println("Los productos en el frigorifico son:\n");
    	for(int i=0; i<lista.size(); i++){
    		System.out.println(lista.get(i));
    		System.out.println();
    	}
	}

	public String toString() {
		return lista.toString();
	}

	
	// Metodos para cambiar la clase Producto, ya que los objetos se alamcenan en una lista
	// es necesario cambiarlos desde esta clase en vez de desde Producto
	
	public void cambiar_min(int pos) {
		Producto a = null;
		a=(Producto) lista.get(pos);
		a.modificar_min();
	}
	
	public void aumentar_cant(int pos) {
		Producto a = null;
		a=(Producto) lista.get(pos);
		a.incrementar();
	}
	
	public void decrementar_cant(int pos) {
		Producto a = null;
		a=(Producto) lista.get(pos);
		a.decrementar();
	}
	
	void mostrarAgotados() {
		System.out.println("Debe hacer la compra de:\n");
    	for(int i=0; i<lista.size(); i++){
    		
    		Producto a = null;
    		a=(Producto) lista.get(i);
    		
    		if (a.cant_min>a.existencias){
	    		System.out.println(lista.get(i));
	    		System.out.println();
    		}
    	}
	}
}